

/*
* 继承
* 1.共性的抽取,进行代码的复用
*
* 子类成员和父类成员不存在同名变量 各自调用就行
*
* 子类成员和父类成员存在同名变量时 优先访问子类中的成员变量 若要访问父类中的同名变量使用super关键字 在子类当中访问父类的成员
*
* super this
* 1.都是Java中的关键字
* 2.只能在非静态方法中使用,来访问非静态的成员变量
* 3.在构造方法中调用时,都必须放在第一行 且不能同时出现
*
*
* 组合
* 1.组合(Composition)体现的是整体与部分、拥有的关系，即has-a的关系。
*
* 两者的区别与联系
* 在继承结构中，父类的内部细节对于子类是可见的。所以我们通常也可以说通过继承的代码复用是一种白盒式代码复用。
* （如果基类的实现发生改变，那么派生类的实现也将随之改变。这样就导致了子类行为的不可预知性；）
* 组合是通过对现有的对象进行拼装（组合）产生新的、更复杂的功能。因为在对象之间，各自的内部细节是不可见的，
* 所以我们也说这种方式的代码复用是黑盒式代码复用。（因为组合中一般都定义一个类型，所以在编译期根本不知道具体会调用哪个实现类的方法）
* 继承，在写代码的时候就要指名具体继承哪个类，所以，在编译期就确定了关系。（从基类继承来的实现是无法在运行期动态改变的，因此降低了应用的灵活性。）
* 组合，在写代码的时候可以采用面向接口编程。所以，类的组合关系一般在运行期确定。
*
* */

/*class Dog {
    String name;
    int age;
    float weight;

    public void eat() {
        System.out.println(name + "正在吃饭");
    }

    public void sleep() {
        System.out.println(name + "正在睡觉");
    }
}


class Cat{
    String name;
    int age;
    float weight;
    public void eat(){
        System.out.println(name + "正在吃饭");
    }
    public void sleep()
    {
        System.out.println(name + "正在睡觉");
    }
    void mew(){
        System.out.println(name + "喵喵喵~~~");
    }
}*/

/*
class Animal {
    String name;
    int age;
    public void eat(){
        System.out.println(name + "正在吃饭");
    }
    public void sleep()
    {
        System.out.println(name + "正在睡觉");
    }
}

class Cat extends Polymorphism.Animal {

    float weight;


    void mew() {
        System.out.println(name + "喵喵喵~~~");
    }
}

class Dog extends Polymorphism.Animal {

    float weight;


}


class Base {

    public int a = 1;
    public int b = 2;
    public void method() {
        System.out.println("Base::method");
    }
}
class Derive extends Base {
    public int c = 3;
    public int a = 4;
    public void func() {
        super.method();
    }
    public void method() {
        System.out.println("Derive::method");
    }

}

public class Test {


    public static void main(String[] args) {
            Derive derive = new Derive();
            derive.func();

    }
    public static void main1(String[] args) {

        Dog dog = new Dog();
        dog.age = 1;
        dog.name = "旺财";
        dog.eat();
        dog.sleep();

    }
}
*/
